# 1、有这样的一个列表，深度不可知，列表里面还会嵌套列表，我想要把这个列表从左到右拼接成一个新的列表，且顺序不变
# 举例：[12,33,[11,22,33,[55,66,99]],[55,66]]
# 变成：[12, 33, 11, 22, 33, 55, 66, 99, 55, 66]
"""
def list1(f):    # def：函数  list1：函数的名字 f：函数的参数
    a = []   # 建立一个空列表取名叫a 用来收集返回值的
    for i in f:   #用for循环遍历函数参数f
        if type(i) == list:    if：如果 type：类型 i：遍历的参数   == ：是否等于 list：列表
            a.extend(list1(i)) 把上一步取到的值返回到建立的a列表  extend(list1(i)) : extend返回的意思 如果返回的是列表，取一个值放入a里
        else:        #否则
            a.append(i)    #在a列表追加i   （意思就是数字的话直接加a列表里）
    return a    返回a列表
c = [12, 33, [11, 22, 33, [55, 66, 99]], [55, 66]]
d = list1(c)
print(d)
"""
# 2、编写装饰器，为多个函数加上认证的功能（用户的账号密码）
# 模拟用户账号密码
"""
a = {'username': 'user123', 'password': 'pass123'}
def b(func):
    def c(*args, **kwargs):
        username = input("请输入用户名: ")
        password = input("请输入密码: ")
        if username == a['username'] and password == a['password']:
            return func(*args, **kwargs)
        else:
            print("认证失败，请检查用户名和密码")
    return c
@b
def d():
    print("登陆成功")
d()
"""
#  要求登录成功一次，后续的函数都无需输入用户名和密码
# 3、请实现一个装饰器，把函数的返回值+100然后返回
"""
def a(func):
    def b(*args,**kwargs):
        result = func(*args,**kwargs)
        result = result+100
        return result
    return b
@a
def sum1(d:int,e:int):
    return d+e
c = sum1(12,345)
print(c)
"""
# 4、请实现一个装饰器，通过一次调用使函数重复执行5次
"""
def a(func):
    def b(*args,**kwargs):# *args 不定长参数接收，返回的是元组  **kwargs 表示不定长关键字参数接受，返回字典
        for i in range(5):
            print(func(*args, **kwargs))
    return b
@a
def f(c,e):
    return c+e
f(1,2)
"""
"""
def a(func): #定义一个装饰器叫a，形参为func
    def b(*args, **kwargs): #定义一个函数b
        for i in range(5): #遍历五次
             func(*args, **kwargs) #将形参赋值
    return b #返回b
@a #调用装饰器a
def c():
    print("sadasd")
c()
"""
# # 5、输入任意个字符串,分别实现从小到大输出和从大到小输出
"""
def paixu(func):
    def d(c):
        func(c)
        a = sorted(c, key=len)
        print("从小到大输出:", a)
        b = sorted(c, key=len, reverse=True)
        print("从大到小输出:", b)
    return d
@paixu
def e(h):
    pass
list1=["asd","asdad","asdasdasa","asdasdadadada"]
e(list1)
"""
# 6、接收n个数字，求这些参数数字的和
"""
def e(func):
    def sum_num(*arg):
        func(*arg)
        return sum(arg)
    return sum_num
@e
def h(*arg):
    pass
print(h(1, 23, 1))
"""
# 7、编写一个函数，实现数字的自增（从0开始，每调用一次，数字+1）
"""
count = 0
def a():
    def b():
        global count# 全局化
        count += 1
        return count
    return b
i  = a()
print(i())
print(i())
print(i())
"""
